package org.jsola.contract.service;

import org.jsola.contract.dao.ITemplateVariableDAO;
import org.jsola.contract.dto.TemplateVariableAddDTO;
import org.jsola.contract.dto.TemplateVariableUpdateDTO;
import org.jsola.contract.entity.TemplateVariableDO;
import org.jsola.contract.query.TemplateVariableQuery;
import org.jsola.contract.vo.TemplateVariableListVO;
import org.jsola.contract.vo.TemplateVariableVO;
import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * 合同模板关联变量
 *
 * @author JanusMix
 */
public interface ITemplateVariableService extends IService<ITemplateVariableDAO, TemplateVariableDO> {

    /**
     * 新增合同模板关联变量
     *
     * @param templateVariableAddDTO 新增合同模板关联变量DTO
     * @param tokenUser              当前用户
     * @return 合同模板关联变量详情信息
     */
    TemplateVariableVO save(TemplateVariableAddDTO templateVariableAddDTO, TokenUser tokenUser);

    /**
     * 批量新增合同模板关联变量
     *
     * @param templateVariableAddDTOList 新增合同模板关联变量DTO
     * @param tokenUser                  当前用户
     * @return 合同模板关联变量详情信息
     */
    List<TemplateVariableVO> batchSave(List<TemplateVariableAddDTO> templateVariableAddDTOList, TokenUser tokenUser);

    /**
     * 修改合同模板关联变量
     *
     * @param templateVariableUpdateDTO 修改合同模板关联变量DTO
     * @param tokenUser                 当前用户
     * @return 更新数量
     */
    int update(TemplateVariableUpdateDTO templateVariableUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除合同模板关联变量，物理删除，更新is_valid字段，从回收站删除
     *
     * @param tokenUser           当前用户
     * @param templateVariableIds 合同模板关联变量id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, Long... templateVariableIds);

    /**
     * 根据合同模板关联变量id查找
     *
     * @param templateVariableId 合同模板关联变量id
     * @param siteId             所属站点id
     * @return 合同模板关联变量详情信息
     */
    TemplateVariableVO selectById(Long templateVariableId, String siteId);

    /**
     * 查询合同模板关联变量
     *
     * @param templateVariableQuery 查询条件
     * @param siteId                所属站点id
     * @return 合同模板关联变量列表信息
     */
    List<TemplateVariableListVO> select(TemplateVariableQuery templateVariableQuery, String siteId);

    /**
     * 查询合同模板关联变量记录数
     *
     * @param templateVariableQuery 查询条件
     * @param siteId                所属站点id
     * @return 合同模板关联变量记录数
     */
    int selectCount(TemplateVariableQuery templateVariableQuery, String siteId);

    /**
     * 分页查询合同模板关联变量
     *
     * @param templateVariableQuery 查询条件
     * @param siteId                所属站点id
     * @return 合同模板关联变量列表信息
     */
    Page<TemplateVariableListVO> selectPage(TemplateVariableQuery templateVariableQuery, String siteId);


    /**
     * 根据合同模板关联变量id查找
     *
     * @param templateVariableId 合同模板关联变量id
     * @param siteId             所属站点id
     * @return 合同模板关联变量
     */
    TemplateVariableDO selectDOById(Long templateVariableId, String siteId);

    /**
     * 查询合同模板关联变量
     *
     * @param templateVariableQuery 查询条件
     * @param siteId                所属站点id
     * @return 合同模板关联变量列表
     */
    List<TemplateVariableDO> selectDO(TemplateVariableQuery templateVariableQuery, String siteId);

    /**
     * 查询模板下的所有变量
     *
     * @param templateId 模板id
     * @param siteId     站点id
     * @return list
     */
    List<TemplateVariableDO> selectByTemplateId(Long templateId, String siteId);

    /**
     * 查询模板下的所有变量
     *
     * @param templateIds 模板ids
     * @param siteId      站点id
     * @return list
     */
    List<TemplateVariableDO> selectByTemplateIds(List<Long> templateIds, String siteId);
}


